﻿/*!
 * @file mixtureofgaussianadaptivenum.h
 * 島田らによる手法
 * 参考文献: 適応的な分布数の増減法を利用した混合ガウス分布による高速な動的背景モデル構築
 * @author 橋本敦史
 * @date Last Change:2010/Apr/06.
 */
#ifndef __BGS_Dynamic_MIXTUREOFGAUSSIAN_ADAPTIVE_NUM_H__
#define __BGS_Dynamic_MIXTUREOFGAUSSIAN_ADAPTIVE_NUM_H__

#include "ImageBackgroundSubtractorDynamicMixtureOfGaussian.h"
#include <vector>
#include "MmplVector.h"
#include "CSVReader.h"
#include <iostream>

namespace mmpl{
	namespace image{


/*!
 * @class 混合正規分布により背景の各画素をモデル化し、分布数を含め動的に背景モデルを更新しながら背景差分を行うクラス
 */
class BackgroundSubtractorDynamicMixtureOfGaussianAdaptiveNum: public BackgroundSubtractorDynamicMixtureOfGaussian{

	public:
		BackgroundSubtractorDynamicMixtureOfGaussianAdaptiveNum(double threshold=0.025,double learningSpeed = 0.01,double HP=0.2,double deadline=0.04,double sigma=60,double mergeThreshold = 10);
		virtual ~BackgroundSubtractorDynamicMixtureOfGaussianAdaptiveNum();


	    virtual void updateByBackGroundColor(MixtureOfSphericalGaussian* mog, const Color& col,const MmplVector& probs);	
		virtual void updateByForeGroundColor(MixtureOfSphericalGaussian* mog, const Color& col,const MmplVector& probs);

		virtual void updateEraseDistributions(MixtureOfSphericalGaussian* mog);

	protected:
		//! これが大きいほど、新しく作成された分布が長生きする
		double HP;
		//! 分布を削除するためのしきい値
		double deadline;

		//! 似た分布を統合するためのしきい値(色の差が全てのチャンネルで同じ距離ならば統合)
		double mergeThreshold;
		double weightedSum(double val1,double val2,double weight1,double weight2);
	private:
};


	} // namespace image

} // namespace skl
#endif // __BackgroundSubtractorMIXTUREOFGAUSSIAN_ADAPTIVE_NUM_H__

